| r1 | ||
|---|---|---|
| r1 (새 문서) | 1 | [목차] |
| 2 | == 개요 == | |
| 3 | KT GTV 서버 환경점검을 위해 사용하는 스크립트이다. | |
| 4 | 공통 점검 내역은 동일하게 수행하나 LSM/ADC 서버와 VOD 서버 역할이 달라 점검내용이 다른 부분이 있다. | |
| 5 | ||
| 6 | == 공통 점검 내역 == | |
| 7 | 1. HW 모델명 확인 | |
| 8 | 2. HDD 및 RAID 구성, 상태 점검 | |
| 9 | 3. 시스템 로그 점검 | |
| 10 | 4. NIC 사용 현황 점검 | |
| 11 | 5. Bond 및 IP 설정 점검 | |
| 12 | 6. Routing 점검 | |
| 13 | 7. OS 버전 점검 | |
| 14 | 8. OS Disk 용량 점검 | |
| 15 | 9. /data Disk 용량 점검 | |
| 16 | 10. 시간동기화 점검 | |
| 17 | 11. GateWay Ping 점검 | |
| 18 | 12. 서버 부팅 관련 설정파일 점검 | |
| 19 | 13. 프로세스 서비스 이중화 상태 점검 | |
| 20 | 14. 프로세스 포트 및 상태 점검 | |
| 21 | 15. CPU 사용률 점검 | |
| 22 | ||
| 23 | == LSM/ADC 서버 점검 내역 == | |
| 24 | 1. LBAdmin 상태 점검 | |
| 25 | 2. LFMServer 로그 점검 | |
| 26 | 3. LFMSinkModule 로그 점검 | |
| 27 | 4. CiGLBServer 로그 점검 | |
| 28 | 5. L_ADS 로그 점검 | |
| 29 | 6. ADSController 로그 점검 | |
| 30 | 7. ADSClient 로그 점검 | |
| 31 | 8. LoadBalancer2 로그 점검 | |
| 32 | ||
| 33 | ||
| 34 | == VOD 서버 점검 내역 == | |
| 35 | 1. CIHVODServer 로그 점검 | |
| 36 | ||
| 37 | ||
| 38 | == 스크립트 본문 및 사용 방법 == | |
| 39 | {{{ ## 사용법 ## | |
| 40 | 1. 아래 스크립트를 복사해 서버에 .sh 파일로 만들어 준다. | |
| 41 | # vim Server_Check.sh | |
| 42 | 2. 스크립트 실행 권한을 부여 한다. | |
| 43 | # chmod +x Server_Check.sh | |
| 44 | 3. 스크립트 수행 시 숫자 7과 해당 서버를 명시한다. | |
| 45 | LSM 서버일 경우 | |
| 46 | # ./Server_Check.sh 7 LSM | |
| 47 | ADC 서버일 경우 | |
| 48 | # ./Server_Check.sh 7 ADC | |
| 49 | VOD 서버일 경우 | |
| 50 | # ./Server_Check.sh 7 VOD | |
| 51 | ||
| 52 | ||
| 53 | #!/bin/bash | |
| 54 | # -*- coding : UTF-8 -*- | |
| 55 | # version : 1.0.0 | |
| 56 | # create date : 2021-11-18 | |
| 57 | # update date : 2025-02-10 | |
| 58 | # ---------------------------------------------- | |
| 59 | # Copyright (c) 2021 | |
| 60 | # @author mir kim | |
| 61 | # Server_Check.sh | |
| 62 | ||
| 63 | scriptName="Server_Check.sh" | |
| 64 | scriptVersion="20250210" | |
| 65 | check_failures="" | |
| 66 | output_file="/home/castis/output_data_$(date +'%Y-%m-%d_%H-%M').txt" | |
| 67 | ENV=$(env | grep LANG) | |
| 68 | ||
| 69 | manPage=""" | |
| 70 | SYNOPSIS | |
| 71 | ./Server_Check.sh [?|-h] | |
| 72 | ||
| 73 | This script works as follows. | |
| 74 | 1. H/W 점검 결과 추출 | |
| 75 | 2. Network 상태 점검 결과 추출 | |
| 76 | 3. OS 상태 점검 결과 추출 | |
| 77 | 4. 이중화 점검 결과 추출 | |
| 78 | 5. 서비스 현황 점검 결과 추출 | |
| 79 | 6. 종합의견 결과 추출 | |
| 80 | 7. JSON 형식으로 반환 | |
| 81 | ||
| 82 | 함수 Make_Json_List() parameter | |
| 83 | ||
| 84 | ex) Make_Json_List 생성유형 \"점검항목 큰 제목\" \"점검항목\" \"점검기준 값\" \"상세 점검 방법\" \"점검 결과 값\" \"양호/불량\" | |
| 85 | ||
| 86 | OPTIONS | |
| 87 | ? or -h | |
| 88 | Show this help message and exit | |
| 89 | ||
| 90 | """ | |
| 91 | ||
| 92 | #local functions start | |
| 93 | ServerName=$(hostname) | |
| 94 | ||
| 95 | # 점검 결과 Result | |
| 96 | Success="양호" | |
| 97 | Fail="불량" | |
| 98 | ||
| 99 | # server model | |
| 100 | Server_Product=$(dmidecode | grep Prod | head -1 | cut -d : -f2 | awk '{print $1, $2, $3, $4}') | |
| 101 | ||
| 102 | function f_Usage() { | |
| 103 | echo "$manPage" | |
| 104 | } | |
| 105 | ||
| 106 | Item_Num=1 | |
| 107 | ||
| 108 | function Make_Json_List() { | |
| 109 | # echo "DEBUG: 매개변수 -> $1 | $2 | $3 | $4 | $5 | $6" | |
| 110 | case $1 in | |
| 111 | First_Start) | |
| 112 | echo -e "--------------------------------------------" | |
| 113 | echo -e "점검 내용 : $3" | |
| 114 | echo -e "결과: $5" | |
| 115 | echo -e "상태: $6" | |
| 116 | echo -e "--------------------------------------------" | |
| 117 | ;; | |
| 118 | Start) | |
| 119 | echo -e "점검 내용 : $3" | |
| 120 | echo -e "결과: $5" | |
| 121 | echo -e "상태: $6" | |
| 122 | echo -e "--------------------------------------------" | |
| 123 | ;; | |
| 124 | Middle) | |
| 125 | echo -e "점검 내용 : $3" | |
| 126 | echo -e "결과: $5" | |
| 127 | echo -e "상태: $6" | |
| 128 | echo -e "--------------------------------------------" | |
| 129 | ;; | |
| 130 | End) | |
| 131 | echo -e "점검 내용 : $3" | |
| 132 | echo -e "결과: $5" | |
| 133 | echo -e "상태: $6" | |
| 134 | echo -e "--------------------------------------------" | |
| 135 | ;; | |
| 136 | First_Single) | |
| 137 | echo -e "점검 내용 : $3" | |
| 138 | echo -e "결과: $5" | |
| 139 | echo -e "상태: $6" | |
| 140 | echo -e "--------------------------------------------" | |
| 141 | ;; | |
| 142 | Single) | |
| 143 | echo -e "점검 내용 : $3" | |
| 144 | echo -e "결과: $5" | |
| 145 | echo -e "상태: $6" | |
| 146 | echo -e "--------------------------------------------" | |
| 147 | ;; | |
| 148 | esac | |
| 149 | } | |
| 150 | ||
| 151 | # H/W 점검 결과 추출 | |
| 152 | function HW_Check() { | |
| 153 | # [ H/W 모델명 확인 ] | |
| 154 | Make_Json_List First_Start "HardwareCheck" "H/W 모델명. 확인" "육안확인 결과" "dmidecode | grep 'Product Name'" "$(dmidecode | grep "Product Name" | head -1 | cut -d : -f2 | awk '{print $1, $2, $3, $4}')" "$Success" | |
| 155 | ||
| 156 | # [ HDD 용량 및 RAID 구성 점검] | |
| 157 | ||
| 158 | # Dell 서버 | |
| 159 | if [[ $Server_Product =~ "PowerEdge" ]]; then | |
| 160 | ||
| 161 | battery_status=$(omreport storage battery | grep "Status" | grep -v Ok) | |
| 162 | disk_status=$(omreport storage pdisk controller=0 | grep "Power Status" -v | grep -w Status | grep -v Ok) | |
| 163 | ||
| 164 | if [ -n "$battery_status" ] || [ -n "$disk_status" ]; then | |
| 165 | Make_Json_List Middle "" "Dell HDD상태 및 RAID 구성 점검" "Fail 또는 Error 있음" "omreport storage battery" "DISK, cache_battery 점검필요" "$Fail" | |
| 166 | else | |
| 167 | Make_Json_List Middle "" "Dell HDD상태 및 RAID 구성 점검" "Fail 또는 Error 없음" "omreport storage pdisk controller=0" "이상없음" "$Success" | |
| 168 | fi | |
| 169 | ||
| 170 | # Gen9 서버 | |
| 171 | elif [[ $Server_Product =~ "Gen9" ]]; then | |
| 172 | HP="hpssacli" | |
| 173 | ||
| 174 | # Gen10 서버 | |
| 175 | elif [[ $Server_Product =~ "Gen10" ]]; then | |
| 176 | HP="ssacli" | |
| 177 | ||
| 178 | # G8 이하 버전 HP 서버 | |
| 179 | else | |
| 180 | HP="hpacucli" | |
| 181 | fi # 여기서 if 문을 닫습니다. | |
| 182 | ||
| 183 | # HP 서버 | |
| 184 | if [ ! -z $HP ]; then | |
| 185 | ||
| 186 | cache_battery_status=$($HP ctrl all show config detail | egrep -i "Cache Status|controller status" | grep -i "Failed") | |
| 187 | ||
| 188 | for list in logicaldrive physicaldrive; do | |
| 189 | drive_check=$($HP ctrl all show config detail | grep -i "failed") | |
| 190 | case $? in | |
| 191 | 0) | |
| 192 | drive_check+=(${list}) | |
| 193 | ;; | |
| 194 | esac | |
| 195 | done | |
| 196 | ||
| 197 | if [ -n "$drive_check" ] || [ -n "$cache_battery_status" ]; then | |
| 198 | Make_Json_List Middle "" "HPE HDD 상태 및 RAID 구성 점검" "Fail 또는 Error 있음" "$HP ctrl all show detail" "DISK 또는 cache_battery 상태 점검필요" "$Fail" | |
| 199 | else | |
| 200 | Make_Json_List Middle "" "HPE HDD 상태 및 RAID 구성 점검" "Fail 또는 Error 없음" "$HP ctrl all show detail" "이상없음" "$Success" | |
| 201 | fi | |
| 202 | fi | |
| 203 | ||
| 204 | # [ 시스템 로그 점검] | |
| 205 | Syslog=$(grep -im 11 error /var/log/messages | egrep -vc "L2 Error|drive_cmd") | |
| 206 | if [ $Syslog -le 10 ]; then | |
| 207 | Make_Json_List Middle "" "시스템 로그 점검" "에러 없음" "grep -i Error /var/log/messages" "이상없음" "$Success" | |
| 208 | else | |
| 209 | Make_Json_List Middle "" "시스템 로그 점검" "에러 없음" "grep -i Error /var/log/messages" "점검필요" "$Fail" | |
| 210 | fi | |
| 211 | } | |
| 212 | ||
| 213 | # Network 상태 점검 결과 추출 | |
| 214 | function Network_Check() { | |
| 215 | ||
| 216 | # [ NIC 사용 현황] | |
| 217 | OS_Version=$(awk '{print $(NF-1)}' /etc/redhat-release) | |
| 218 | USE_Bond=$(ls -al /etc/sysconfig/network-scripts/ifcfg-bond* | egrep -w "ifcfg-bond0$|ifcfg-bond1$|ifcfg-bond2quot; -c 2>/dev/null) | |
| 219 | ||
| 220 | case $OS_Version in | |
| 221 | ||
| 222 | 6.4 | 6.6 | 6.9) | |
| 223 | Alias=$(grep -c 'alias bond' /etc/modprobe.d/bonding.conf) | |
| 224 | ;; | |
| 225 | ||
| 226 | 5 | 5.4 | 5.7) | |
| 227 | Alias=$(grep -c 'alias bond' /etc/modprobe.conf) | |
| 228 | ;; | |
| 229 | ||
| 230 | 7.5.1804) | |
| 231 | Alias=$(echo $USE_Bond) | |
| 232 | ;; | |
| 233 | esac | |
| 234 | ||
| 235 | case $USE_Bond in | |
| 236 | ||
| 237 | $Alias) | |
| 238 | Make_Json_List Start "NetworkCheck" "NIC 사용 현황" "-" "ethtool ethX\\\ncat /etc/modprobe.conf\\\ncat /etc/modprobe.d/bonding.conf" "이상없음" "$Success" | |
| 239 | ;; | |
| 240 | *) | |
| 241 | Make_Json_List Start "NetworkCheck" "NIC 사용 현황" "-" "ethtool ethX\\\ncat /etc/modprobe.conf\\\ncat /etc/modprobe.d/bonding.conf" "점검필요" "$Fail" | |
| 242 | ;; | |
| 243 | esac | |
| 244 | ||
| 245 | # [ IP 설정 확인] | |
| 246 | ||
| 247 | # vpc 사용 여부 | |
| 248 | ip addr show vpcmanage >/dev/null 2>/dev/null | |
| 249 | ||
| 250 | case $? in | |
| 251 | ||
| 252 | 0) | |
| 253 | Manage_IP=$(ip addr show vpcmanage | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }') | |
| 254 | Service_IP=$(ip addr show vpcservice | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }') | |
| 255 | ||
| 256 | Make_Json_List Middle "" "IP 설정 확인" "-" "ifconfig 명령으로 IP 설정 확인" "$Manage_IP\\\n$Service_IP" "$Success" | |
| 257 | ;; | |
| 258 | *) | |
| 259 | # bond2 사용 여부 | |
| 260 | ip addr show bond2 >/dev/null 2>/dev/null | |
| 261 | ||
| 262 | case $? in | |
| 263 | ||
| 264 | 0) | |
| 265 | Manage_IP=$(ip addr show bond0 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1) | |
| 266 | Service1_IP=$(ip addr show bond1 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1) | |
| 267 | Service2_IP=$(ip addr show bond2 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1) | |
| 268 | ||
| 269 | Make_Json_List Middle "" "IP 설정 확인" "-" "ifconfig 명령으로 IP 설정 확인" "Manage_IP: $Manage_IP, Service1_IP: $Service1_IP, Service2_IP : $Service2_IP" "$Success" | |
| 270 | ;; | |
| 271 | *) | |
| 272 | Manage_IP=$(ip addr show bond0 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1) | |
| 273 | Service_IP=$(ip addr show bond1 | grep -w "inet" | cut -d'/' -f1 | awk '{ print $2 }' | head -1) | |
| 274 | ||
| 275 | Make_Json_List Middle "" "IP 설정 확인" "-" "ifconfig 명령으로 IP 설정 확인" "$Manage_IP: $Manage_IP, Service_IP: $Service_IP" "$Success" | |
| 276 | ||
| 277 | ;; | |
| 278 | esac | |
| 279 | ;; | |
| 280 | esac | |
| 281 | ||
| 282 | # 관리 및 서비스 네트워크 Link 상태 점검 | |
| 283 | for list in $(grep "ONBOOT=yes" /etc/sysconfig/network-scripts/ifcfg-bond[0-9] | awk -F'ifcfg-' '{ split($2,arr,":"); print arr[1] }'); do | |
| 284 | case $list in | |
| 285 | bond1) | |
| 286 | # 후지쯔 서버 | |
| 287 | if [[ $Server_Product =~ "PRIMERGY" ]]; then | |
| 288 | ||
| 289 | NIC_Fail_Cnt=$(grep "$Active_NIC" /proc/net/bonding/bond1 -A 2 | grep Count | cut -d : -f2 | awk '{ if ( $1 >= 100 ){print}}' | wc -l) | |
| 290 | Active_NIC=$(grep "MASTER_SLAVE" /usr/local/castis/bfod/bfod.cfg | awk -F'=' '{ print $NF }') | |
| 291 | grep "$Active_NIC" /proc/net/bonding/${list} -A 2 | grep "Status" | grep -vq "up" | |
| 292 | Link_Status=$? | |
| 293 | else | |
| 294 | ||
| 295 | NIC_Fail_Cnt=$(grep Count /proc/net/bonding/$list | cut -d : -f2 | awk '{ if ( $1 >= 100 ){print}}' | wc -l) | |
| 296 | grep "Status" /proc/net/bonding/${list} | grep -vq "up" | |
| 297 | Link_Status=$? | |
| 298 | fi | |
| 299 | ;; | |
| 300 | ||
| 301 | *) | |
| 302 | NIC_Fail_Cnt=$(grep Count /proc/net/bonding/$list | cut -d : -f2 | awk '{ if ( $1 >= 100 ){print}}' | wc -l) | |
| 303 | grep "Status" /proc/net/bonding/${list} | grep -vq "up" | |
| 304 | Link_Status=$? | |
| 305 | ;; | |
| 306 | esac | |
| 307 | done | |
| 308 | ||
| 309 | # [ Routing 설정 점검] | |
| 310 | ||
| 311 | #bond2 존재 여부 | |
| 312 | src_Cnt=$(ip route show | grep "src" | wc -l) | |
| 313 | Static_IP_Cnt=$(grep "IPADDR" /etc/sysconfig/network-scripts/ifcfg-* | egrep -v "#|127.0.0.1" | wc -l) | |
| 314 | case $src_Cnt in | |
| 315 | $Static_IP_Cnt) | |
| 316 | Make_Json_List End "" "Routing 설정 점검" "" "route -n routing 정보 확인" "이상없음" "$Success" | |
| 317 | ;; | |
| 318 | *) | |
| 319 | Make_Json_List End "" "Routing 설정 점검" "" "route -n routing 정보 확인" "점검필요" "$Fail" | |
| 320 | ;; | |
| 321 | esac | |
| 322 | } | |
| 323 | ||
| 324 | # OS 상태 점검 결과 추출 | |
| 325 | function OS_Check() { | |
| 326 | ||
| 327 | OS_Limit_Space=70 | |
| 328 | L_Data_Limit_Space=90 | |
| 329 | V_Data_Limit_Space=92 | |
| 330 | ||
| 331 | # [ OS/Kerne 버전 ] | |
| 332 | ||
| 333 | OS_Version=$(awk -F 'release' '{ print $2 }' /etc/redhat-release | awk '{ print $(NF-1) }') | |
| 334 | Make_Json_List Start "OSCheck" "OS/Kernel 버전" "-" "cat /etc/redhat-release\\\n uname -a" "$OS_Version" "$Success" | |
| 335 | ||
| 336 | # [ OS_디스크 용량 점검] | |
| 337 | OS_Free_Space=$(df -h | grep -w "/" | awk '{ print $(NF-1) }' | cut -d'%' -f1) | |
| 338 | if [ $OS_Free_Space -lt $OS_Limit_Space ]; then | |
| 339 | ||
| 340 | Make_Json_List Middle "" "OS 디스크 용량 점검 - ( 마운트위치: / )" "${OS_Limit_Space}% 미만" "df -h 명령으로 / 의 사용률 확인" "이상없음" "$Success" | |
| 341 | else | |
| 342 | Make_Json_List Middle "" "OS 디스크 용량 점검 - ( 마운트위치: / )" "${OS_Limit_Space}% 미만" "df -h 명령으로 / 의 사용률 확인" "점검필요" "$Fail" | |
| 343 | fi | |
| 344 | ||
| 345 | # [ 스토리지_디스크 용량 점검] | |
| 346 | Data_Fail_Cnt=0 | |
| 347 | case $1 in | |
| 348 | LSM | ADC) | |
| 349 | for list in $(df -h | egrep "/data" | grep "%" | awk '{ print $NF }'); do | |
| 350 | ||
| 351 | if [ $(df -h | grep -w "$list" | awk '{ print $(NF-1) }' | cut -d'%' -f1) -gt $L_Data_Limit_Space ]; then ((Data_Fail_Cnt++)); fi | |
| 352 | done | |
| 353 | ||
| 354 | case $Data_Fail_Cnt in | |
| 355 | 0) | |
| 356 | Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${L_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "이상없음" "$Success" | |
| 357 | ;; | |
| 358 | *) | |
| 359 | Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${L_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "점검필요" "$Fail" | |
| 360 | ;; | |
| 361 | esac | |
| 362 | ;; | |
| 363 | VOD) | |
| 364 | ||
| 365 | if df -h | egrep -q "/data"; then | |
| 366 | for list in $(df -h | egrep "/data" | grep "%" | awk '{ print $NF }'); do | |
| 367 | if [ $(df -h | grep -w "$list" | awk '{ print $(NF-1) }' | cut -d'%' -f1) -gt $V_Data_Limit_Space ]; then | |
| 368 | ((Data_Fail_Cnt++)) | |
| 369 | fi | |
| 370 | done | |
| 371 | else | |
| 372 | # /data 디렉토리가 없으면 점검필요로 처리 | |
| 373 | Data_Fail_Cnt=1 | |
| 374 | fi | |
| 375 | ||
| 376 | case $Data_Fail_Cnt in | |
| 377 | ||
| 378 | 0) | |
| 379 | Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${V_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "이상없음" "$Success" | |
| 380 | ;; | |
| 381 | *) | |
| 382 | Make_Json_List Middle "" "스토리지 디스크 용량 점검 - ( 마운트위치: /data? )" "${V_Data_Limit_Space}% 미만" "df -h 명령으로 각 /data?들의 사용률 확인" "점검필요" "$Fail" | |
| 383 | ;; | |
| 384 | esac | |
| 385 | ;; | |
| 386 | esac | |
| 387 | ||
| 388 | # [ 시간동기화 확인] | |
| 389 | ntpq -p | egrep -q '\+|\*' | |
| 390 | ||
| 391 | case $? in | |
| 392 | 0) | |
| 393 | Make_Json_List Middle "" "시간동기화 확인" "*220.73.142.71\\\n*220.73.142.73" "ntpq -p 명령으로 시간 동기화 동작 상태 확인" "이상없음" "$Success" | |
| 394 | ;; | |
| 395 | *) | |
| 396 | Make_Json_List Middle "" "시간동기화 확인" "*220.73.142.71\\\n*220.73.142.73" "ntpq -p 명령으로 시간 동기화 동작 상태 확인" "점검필요" "$Fail" | |
| 397 | ;; | |
| 398 | esac | |
| 399 | ||
| 400 | # GATEWAY PING 확인 | |
| 401 | ||
| 402 | ifconfig bond2 >/dev/null 2>/dev/null | |
| 403 | if [ $? -eq 0 ]; then | |
| 404 | Service_GW=($(ip route show | grep default -A 2 | grep "nexthop via" | awk -F'via ' '{ split($2,arr," "); print arr[1] }')) | |
| 405 | Service_Interface=($(ip route show | grep default -A 2 | grep "nexthop via" | awk -F'dev ' '{ split($2,arr," "); print arr[1] }')) | |
| 406 | else | |
| 407 | Service_GW=($(ip route show | grep default -A 2 | grep via | awk -F'via ' '{ split($2,arr," "); print arr[1] }')) | |
| 408 | Service_Interface=($(ip route show | grep default -A 2 | grep via | awk -F'dev ' '{ split($2,arr," "); print arr[1] }')) | |
| 409 | ||
| 410 | fi | |
| 411 | Service_GW_Result=0 | |
| 412 | ||
| 413 | for ((NIC_Cnt = 0; NIC_Cnt < ${#Service_GW[@]}; NIC_Cnt++)); do | |
| 414 | ping -I ${Service_Interface[$NIC_Cnt]} ${Service_GW[$NIC_Cnt]} -c 1 >/dev/null 2>/dev/null | |
| 415 | ((Service_GW_Result = $Service_GW_Result + $?)) | |
| 416 | done | |
| 417 | ||
| 418 | if [ $Service_GW_Result -eq 0 ]; then | |
| 419 | Make_Json_List Middle "" "GATEWAY_PING 확인" "정상" "ping '${Service_GW[*]}' (${Service_Interface[*]})" "이상없음" "$Success" | |
| 420 | else | |
| 421 | Make_Json_List Middle "" "GATEWAY_PING 확인" "정상" "ping '${Service_GW[*]}' (${Service_Interface[*]})" "점검필요" "$Fail" | |
| 422 | fi | |
| 423 | ||
| 424 | # [ 서버 부팅 시 스크립트 권한 확인, 고성능서버 설정 확인 등 ] | |
| 425 | ||
| 426 | sum_Result=() | |
| 427 | ||
| 428 | #crontab (파일 권한 및 소유자 확인) | |
| 429 | ls -l /etc/crontab | awk '{ print $1 }' | egrep -q "^-rw-" | |
| 430 | cron_Authority=$? | |
| 431 | ls -ltr /etc/crontab | awk '{ print $3 }' | grep -q "root" | |
| 432 | cron_Manager=$? | |
| 433 | ||
| 434 | if [ $cron_Authority -eq 0 ] && [ $cron_Manager -eq 0 ]; then | |
| 435 | cron_Result=0 | |
| 436 | else | |
| 437 | cron_Result=" cron " | |
| 438 | fi | |
| 439 | ||
| 440 | #sysctl.conf (파일에 해당 문자열이 있는지 확인인) | |
| 441 | grep -wq "TCP Setting by CASTIS" /etc/sysctl.conf | |
| 442 | sysctl_Result=$? | |
| 443 | ||
| 444 | if [ $sysctl_Result -ne 0 ]; then sysctl_Result=" sysctl "; fi | |
| 445 | ||
| 446 | #rc.local (심볼릭 링크 설정 확인인) | |
| 447 | ls -ltr /etc/rc.local | egrep "^lrwx" | awk '{ print $NF }' | egrep -q "rc.d/rc.local" | |
| 448 | rclocal_Authority=$? | |
| 449 | if [ $rclocal_Authority -ne 0 ]; then rclocal_Authority=" rclocal_Authority "; fi | |
| 450 | ||
| 451 | Omission_Ps=() | |
| 452 | case $1 in | |
| 453 | LSM | ADC) | |
| 454 | #AD node check | |
| 455 | echo $(hostname) | grep -wq "AD" | |
| 456 | AD_Check=$? | |
| 457 | ||
| 458 | case $AD_Check in | |
| 459 | 0) | |
| 460 | rc_local_Ps=("ServiceMonitorCtl" "NetIOCtl" "CiMonitoringAgentMonitor") | |
| 461 | ;; | |
| 462 | 1) | |
| 463 | rc_local_Ps=("ServiceMonitorCtl" "NetIOCtl" "LFMSinkModuleMonitor" "CiMonitoringAgentMonitor") | |
| 464 | ;; | |
| 465 | esac | |
| 466 | ||
| 467 | # share storage check | |
| 468 | grep -q "Virtual" /usr/local/castis/LoadBalancer2.cfg | |
| 469 | Share_Data_Result=$? | |
| 470 | ||
| 471 | if [ $Share_Data_Result -eq 0 ]; then rc_local_Ps+=("CenterFileManagerCtl"); fi | |
| 472 | ;; | |
| 473 | VOD) | |
| 474 | # share storage check | |
| 475 | grep -q "Shared_Base_Directory" /usr/local/castis/vod.cfg | |
| 476 | Share_Data_Result=$? | |
| 477 | ||
| 478 | rc_local_Ps=("ServiceMonitorCtl" "eStreamServer" "NetIOCtl" "ADMMonitor") | |
| 479 | if [ $Share_Data_Result -eq 0 ]; then rc_local_Ps+=("CenterFileWorkerCtl"); fi | |
| 480 | ;; | |
| 481 | esac | |
| 482 | ||
| 483 | for ((PS_Cnt = 0; PS_Cnt < ${#rc_local_Ps[@]}; PS_Cnt++)); do | |
| 484 | ||
| 485 | grep -v '#' /etc/rc.local | grep -q "${rc_local_Ps[$PS_Cnt]}" | |
| 486 | if [ $? -ne 0 ]; then Omission_Ps+=(${rc_local_Ps[$PS_Cnt]}); fi | |
| 487 | ||
| 488 | done | |
| 489 | ||
| 490 | for list in $cron_Result $sysctl_Result $rclocal_Authority; do | |
| 491 | if [ "$list" != "0" ]; then sum_Result+=($list); fi | |
| 492 | done | |
| 493 | ||
| 494 | if [ ! $sum_Result ] && [ ! $Omission_Ps ]; then | |
| 495 | Make_Json_List End "" "서버 부팅 시 스크립트 설정 누락 확인, 고성능 서버 설정 확인 등" "정상" "rc.local, crontab, sysctl.conf" "이상없음" "$Success" | |
| 496 | else | |
| 497 | Make_Json_List End "" "서버 부팅 시 스크립트 설정 누락 확인, 고성능 서버 설정 확인 등" "정상" "rc.local, crontab, sysctl.conf" "${sum_Result[*]} ${Omission_Ps[*]} 점검필요" "$Fail" | |
| 498 | fi | |
| 499 | } | |
| 500 | ||
| 501 | # 이중화 점검 | |
| 502 | function Cluster_Check() { | |
| 503 | ||
| 504 | #[ 프로세스 이중화 테스트 점검 ] | |
| 505 | grep -v "#" /usr/local/castis/svcmonitor.cfg | grep -q "Service1_My_Priority=0" | |
| 506 | # Master_Cnt = 1 : backup, 0: Active | |
| 507 | Master_Cnt=$? | |
| 508 | VIP_Up_Fail_Cnt=0 | |
| 509 | ||
| 510 | for V_IP in $(grep "Representative_NIC" /usr/local/castis/svcmonitor.cfg | grep -v "#" | cut -d '=' -f2 | sort -u); do | |
| 511 | ip addr show | grep -q "secondary ${V_IP}" | |
| 512 | if [ $? -ne 0 ]; then ((VIP_Up_Fail_Cnt++)); fi | |
| 513 | done | |
| 514 | ||
| 515 | case $VIP_Up_Fail_Cnt in | |
| 516 | 0) | |
| 517 | Make_Json_List Single "ClusterCheck" "프로세스 이중화 테스트 점검" "-" "LSM에서 실행 중이면 정상, ADC에서 실행중이면 절체로 판단" "이상없음" "$Success" | |
| 518 | return 0 | |
| 519 | ;; | |
| 520 | *) | |
| 521 | case $Master_Cnt in | |
| 522 | 0) | |
| 523 | Make_Json_List Single "ClusterCheck" "프로세스 이중화 테스트 점검" "-" "LSM에서 실행 중이면 정상, ADC에서 실행중이면 절체로 판단" "점검필요" "$Fail" | |
| 524 | return 1 | |
| 525 | ;; | |
| 526 | 1) | |
| 527 | Make_Json_List Single "ClusterCheck" "프로세스 이중화 테스트 점검" "-" "LSM에서 실행 중이면 정상, ADC에서 실행중이면 절체로 판단" "이상없음" "$Success" | |
| 528 | return 1 | |
| 529 | ;; | |
| 530 | esac | |
| 531 | ;; | |
| 532 | esac | |
| 533 | ||
| 534 | } | |
| 535 | ||
| 536 | # 서비스 현황 점검 | |
| 537 | Service_Solution_Status_Check() { | |
| 538 | ||
| 539 | DAY=$(date +%F) | |
| 540 | MONTH=$(date +%Y-%m) | |
| 541 | EVENTLOG_DAY=$(date +%Y%m%d) | |
| 542 | OS_Version=$(awk '{print $(NF-1)}' /etc/redhat-release) | |
| 543 | ||
| 544 | # LSM 포트 변수 정의 | |
| 545 | LFMServer_PORT="8549" | |
| 546 | LFMSinkModule_PORT="8550" | |
| 547 | LoadBalancer2_PORT="50890" | |
| 548 | ADSController_PORT="904" | |
| 549 | ADSClient_PORT="911" | |
| 550 | L_ADS_PORT="30000" | |
| 551 | L_GSDM_PORT="18079" | |
| 552 | L_NRM_PORT="18081" | |
| 553 | file_requester_PORT="18084" | |
| 554 | cache_manager_PORT="8081" | |
| 555 | NetIOServer3_PORT="32128" | |
| 556 | CiMonitoringAgent_PORT="30002" | |
| 557 | ServiceMonitor_PORT="3511" | |
| 558 | ||
| 559 | # VOD 포트 변수 정의 | |
| 560 | CiHVODServer_PORT="554" | |
| 561 | ADM_PORT="40080" | |
| 562 | ADS_PORT="30000" | |
| 563 | NetIOServer3_PORT="32128" | |
| 564 | cache_manager_PORT="8081" | |
| 565 | CiMonitoringAgent_PORT="30002" | |
| 566 | ||
| 567 | # LISTEN | |
| 568 | LISTEN_OUTPUT=$(netstat -tnpl | awk '/LISTEN/ {split($4, a, ":"); print a[length(a)]}' | sed 's/\/.*//g') | |
| 569 | ||
| 570 | # 누락된 항목을 저장할 변수 | |
| 571 | MISSING_ITEMS="" | |
| 572 | ISSUES_FOUND=0 | |
| 573 | ||
| 574 | # LSM과 VOD 구분하여 점검 | |
| 575 | case $1 in | |
| 576 | LSM) | |
| 577 | for PORT_LSM in ServiceMonitor_PORT LFMServer_PORT LFMSinkModule_PORT LoadBalancer2_PORT ADSController_PORT ADSClient_PORT L_ADS_PORT L_GSDM_PORT L_NRM_PORT file_requester_PORT cache_manager_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do | |
| 578 | PORT=${!PORT_LSM} | |
| 579 | if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then | |
| 580 | MISSING_ITEMS+="$PORT_LSM($PORT), " | |
| 581 | TEMP_MISSING_ITEMS+="$PORT_LSM($PORT) " | |
| 582 | ISSUES_FOUND=1 | |
| 583 | printed_items[$PORT_LSM]=$PORT | |
| 584 | fi | |
| 585 | done | |
| 586 | sleep 3 | |
| 587 | for PORT_LSM in ServiceMonitor_PORT LFMServer_PORT LFMSinkModule_PORT LoadBalancer2_PORT ADSController_PORT ADSClient_PORT L_ADS_PORT L_GSDM_PORT L_NRM_PORT file_requester_PORT cache_manager_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do | |
| 588 | PORT=${!PORT_LSM} | |
| 589 | if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then | |
| 590 | if [[ -z "${printed_items[$PORT_LSM]}" ]]; then | |
| 591 | MISSING_ITEMS+="$PORT_LSM($PORT), " | |
| 592 | ISSUES_FOUND=1 | |
| 593 | printed_items[$PORT_LSM]=$PORT | |
| 594 | fi | |
| 595 | fi | |
| 596 | done | |
| 597 | ;; | |
| 598 | ADC) | |
| 599 | for PORT_LSM in ServiceMonitor_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do | |
| 600 | PORT=${!PORT_LSM} | |
| 601 | if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then | |
| 602 | MISSING_ITEMS+="$PORT_LSM($PORT), " | |
| 603 | TEMP_MISSING_ITEMS+="$PORT_LSM($PORT) " | |
| 604 | ISSUES_FOUND=1 | |
| 605 | printed_items[$PORT_LSM]=$PORT | |
| 606 | fi | |
| 607 | done | |
| 608 | sleep 3 | |
| 609 | for PORT_LSM in ServiceMonitor_PORT NetIOServer3_PORT CiMonitoringAgent_PORT; do | |
| 610 | PORT=${!PORT_LSM} | |
| 611 | if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then | |
| 612 | if [[ -z "${printed_items[$PORT_LSM]}" ]]; then | |
| 613 | MISSING_ITEMS+="$PORT_LSM($PORT), " | |
| 614 | ISSUES_FOUND=1 | |
| 615 | printed_items[$PORT_LSM]=$PORT | |
| 616 | fi | |
| 617 | fi | |
| 618 | done | |
| 619 | ;; | |
| 620 | VOD) | |
| 621 | # VOD 포트 점검 | |
| 622 | for PORT_VOD in CiHVODServer_PORT ADM_PORT ADS_PORT NetIOServer3_PORT cache_manager_PORT CiMonitoringAgent_PORT; do | |
| 623 | PORT=${!PORT_VOD} | |
| 624 | if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then | |
| 625 | MISSING_ITEMS+="$PORT_LSM($PORT), " | |
| 626 | TEMP_MISSING_ITEMS+="$PORT_LSM($PORT) " | |
| 627 | ISSUES_FOUND=1 | |
| 628 | printed_items[$PORT_LSM]=$PORT | |
| 629 | fi | |
| 630 | done | |
| 631 | sleep 3 | |
| 632 | for PORT_VOD in CiHVODServer_PORT ADM_PORT ADS_PORT NetIOServer3_PORT cache_manager_PORT CiMonitoringAgent_PORT; do | |
| 633 | PORT=${!PORT_VOD} | |
| 634 | if ! echo "$LISTEN_OUTPUT" | grep -qw "$PORT"; then | |
| 635 | if [[ -z "${printed_items[$PORT_LSM]}" ]]; then | |
| 636 | MISSING_ITEMS+="$PORT_LSM($PORT), " | |
| 637 | ISSUES_FOUND=1 | |
| 638 | printed_items[$PORT_LSM]=$PORT | |
| 639 | fi | |
| 640 | fi | |
| 641 | done | |
| 642 | ;; | |
| 643 | esac | |
| 644 | ||
| 645 | # 결과 출력 | |
| 646 | if [ $ISSUES_FOUND -eq 0 ]; then | |
| 647 | Make_Json_List Single "ServiceCheck" " 포트 및 프로그램 상태 확인" "모두 LISTEN 상태" "netstat 명령으로 포트 및 프로그램 확인" "이상없음" "$Success" | |
| 648 | else | |
| 649 | MISSING_ITEMS_STR=${MISSING_ITEMS%, } | |
| 650 | Make_Json_List Single "ServiceCheck" " 포트 및 프로그램 상태 확인" "LISTEN 확인 실패: $MISSING_ITEMS_STR" "netstat 명령으로 포트 및 프로그램 확인" "$MISSING_ITEMS_STR 점검필요" "$Fail" | |
| 651 | fi | |
| 652 | ||
| 653 | # CPU 사용률 확인 | |
| 654 | VMSTAT=$(vmstat 1 3 | awk '{print $15}' | sed -n 4p) | |
| 655 | ||
| 656 | if [ "$1" != "VOD" ] && [ $2 -ne 0 ]; then | |
| 657 | if [ $VMSTAT -ge 30 ]; then | |
| 658 | Make_Json_List Single "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "이상없음" "$Success" | |
| 659 | else | |
| 660 | Make_Json_List Single "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "불량" "$Fail" | |
| 661 | fi | |
| 662 | else | |
| 663 | if [ $VMSTAT -ge 30 ]; then | |
| 664 | Make_Json_List Start "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "이상없음" "$Success" | |
| 665 | else | |
| 666 | Make_Json_List Start "ServiceCheck" "CPU 사용률 확인" "30% 이상" "vmstat 명령으로 CPU id(idle) 확인" "불량" "$Fail" | |
| 667 | fi | |
| 668 | fi | |
| 669 | ||
| 670 | # LBADMIN 상태 확인, 로그 기반 장애 내역 점검 | |
| 671 | if [ "$1" != "VOD" ]; then | |
| 672 | ||
| 673 | if [ $2 -eq 0 ]; then | |
| 674 | Server_Error_Cnt=$(/usr/local/castis/tools/vodcmd all status | grep "Error" | awk '{ print $1 }' | xargs echo) | |
| 675 | if [ -z "$Server_Error_Cnt" ]; then | |
| 676 | ||
| 677 | Make_Json_List Middle "" "LBAdmin 상태 확인" "-" "LBAdmin에서 LB서버 상태 확인 ( Running, Pause, Error )" "이상없음" "$Success" | |
| 678 | ||
| 679 | else | |
| 680 | Make_Json_List Middle "" "LBAdmin 상태 확인" "-" "LBAdmin에서 LB서버 상태 확인 ( Running, Pause, Error )" "${Server_Error_Cnt} 점검필요" "$Fail" | |
| 681 | fi | |
| 682 | ||
| 683 | LFM_DIST_LOG1=0 | |
| 684 | LFM_DIST_LOG2=0 | |
| 685 | GLB_LIMIT="30" | |
| 686 | LB_EVENT_LIMIT="30" | |
| 687 | LB_CI_LIMIT="30" | |
| 688 | LFM_EVENT_LIMIT="30" | |
| 689 | LFM_CI_LIMIT="30" | |
| 690 | LFMSINK_LIMIT="30" | |
| 691 | LNRM_LIMIT=30 | |
| 692 | LGSDM_LIMIT=30 | |
| 693 | ADS_LIMIT=30 | |
| 694 | ADC_LIMIT=30 | |
| 695 | ADSCONTROLLER_LIMIT=30 | |
| 696 | UNIXTIME_20=$(date +%s -d '20 minute ago') | |
| 697 | #OTV | |
| 698 | if [ $OS_Version == "7.5.1804" ]; then | |
| 699 | #CiGLBServer | |
| 700 | if [ -d /var/log/castis/glb_log ]; then | |
| 701 | LOG_FILE=$(ls -ltr /var/log/castis/glb_log/GLB.log 2>/dev/null) | |
| 702 | if [ ! -f "$LOG_FILE" ]; then | |
| 703 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "LOG 파일 없음" "CiGLBServer: $LOG_FILE 파일 없음" "GLB 로그파일 여부 점검필요" "$Fail" | |
| 704 | else | |
| 705 | GLB_CI_LOG=$(egrep -ic "error|Fail" "$LOG_FILE") | |
| 706 | if [ "$GLB_CI_LOG" -ge "$GLB_LIMIT" ]; then | |
| 707 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 있음" "CiGLBServer: $LOG_FILE 'error|fail'" "점검필요" "$Fail" | |
| 708 | else | |
| 709 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 없음" "CiGLBServer: $LOG_FILE 'error|fail'" "이상없음" "$Success" | |
| 710 | fi | |
| 711 | fi | |
| 712 | else | |
| 713 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "디렉터리 없음" "CiGLBServer: /var/log/castis/glb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 714 | fi | |
| 715 | #LoadBalancer2 | |
| 716 | if [ -d /var/log/castis/lb_log ]; then | |
| 717 | LOG_FILES="/var/log/castis/lb_log/LoadBalancer2.log 2>/dev/null" | |
| 718 | if [ -z "$LOG_FILES" ]; then | |
| 719 | Make_Json_List End "" "LoadBalancer2 동작 확인" "LOG 파일 없음" "LoadBalancer2: /var/log/castis/lb_log 파일 없음" "LoadBalancer2.log 로그파일 여부 점검필요" "$Fail" | |
| 720 | else | |
| 721 | LB_CI_LOG=$(egrep -i "error|Fail" $LOG_FILES | grep -vc "LimitCacheContent list" | awk -F':' '{ sum += $2 } END { print sum }') | |
| 722 | LB_EVENT_LOG=$(egrep -ic "error|Fail" /var/log/castis/lb_log/EventLog[$EVENTLOG_DAY].log 2>/dev/null || echo 0) | |
| 723 | if [ $LB_CI_LOG -ge $LB_CI_LIMIT ] || [ $LB_EVENT_LOG -ge $LB_EVENT_LIMIT ]; then | |
| 724 | Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 있음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "LoadBalancer2.log 점검필요" "$Fail" | |
| 725 | else | |
| 726 | Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 없음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "이상없음" "$Success" | |
| 727 | fi | |
| 728 | fi | |
| 729 | else | |
| 730 | Make_Json_List End "" "LoadBalancer2 동작 확인" "디렉터리 없음" "LoadBalancer2: /var/log/castis/lb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 731 | fi | |
| 732 | else | |
| 733 | #LFMServer | |
| 734 | if [ -d /var/log/castis/lfm_log ]; then | |
| 735 | # 최근 LFMServer.log" 파일 5개 선택택 | |
| 736 | LOG_FILES=$(ls /var/log/castis/lfm_log/$MONTH/${DAY}* | tail -5 | awk '{ print $NF }' 2>/dev/null) | |
| 737 | if [ -z "$LOG_FILES" ]; then | |
| 738 | Make_Json_List Middle "" "LFMServer 동작 확인" "LOG 파일 없음" "LFMServer: /var/log/castis/lfm_log/LFMServer.log" "LFMServer.log 로그파일 여부 점검필요" "$Fail" | |
| 739 | else | |
| 740 | # 선택된 파일에서 에러와 실패 패턴 검색 | |
| 741 | LFM_CI_LOG=$(egrep -v "Infor|match|Source file" $LOG_FILES | egrep -ic "error|Fail" 2>/dev/null) | |
| 742 | if [ $LFM_CI_LOG -ge $LFM_CI_LIMIT ]; then | |
| 743 | Make_Json_List Middle "" "LFMServer 동작 확인" "Fail 또는 Error 있음" "LFMServer: /var/log/castis/lfm_log/LFMServer.log 'error|fail'" "LFMServer.log 점검필요" "$Fail" | |
| 744 | else | |
| 745 | Make_Json_List Middle "" "LFMServer 동작 확인" "Fail 또는 Error 없음" "LFMServer: /var/log/castis/lfm_log/LFMServer.log 'error|fail'" "이상없음" "$Success" | |
| 746 | fi | |
| 747 | fi | |
| 748 | else | |
| 749 | Make_Json_List Middle "" "LFMServer 동작 확인" "디렉터리 없음" "LFMServer: /var/log/castis/lfm_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 750 | fi | |
| 751 | # LFMSinkModule | |
| 752 | if [ -d /var/log/castis/lfmsinkmodule_log ]; then | |
| 753 | # 최근 LFMSinkModule.log 파일 5개 선택 | |
| 754 | LOG_FILES=$(ls /var/log/castis/lfmsinkmodule_log/${MONTH}/${DAY}* | tail -5 | awk '{ print $NF }' 2>/dev/null) | |
| 755 | if [ -z "$LOG_FILES" ]; then | |
| 756 | Make_Json_List Middle "" "LFMSinkModule 동작 확인" "LOG 파일 없음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log/LFMSinkModule.log" "LFMSinkModule.log 로그파일 여부 점검필요" "$Fail" | |
| 757 | else | |
| 758 | LFMSINKMODULE_LOG=$(egrep -ic "error|Fail" $LOG_FILES) | |
| 759 | if [ $LFMSINKMODULE_LOG -ge $LFMSINK_LIMIT ]; then | |
| 760 | Make_Json_List Middle "" "LFMSinkModule 동작 확인" "Fail 또는 Error 있음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log/LFMSinkModule.log 'error|fail'" "LFMSinkModule.log 점검필요" "$Fail" | |
| 761 | else | |
| 762 | Make_Json_List Middle "" "LFMSinkModule 동작 확인" "Fail 또는 Error 없음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log/EventLog.log 'error|fail'" "이상없음" "$Success" | |
| 763 | fi | |
| 764 | fi | |
| 765 | else | |
| 766 | Make_Json_List Middle "" "LFMSinkModule 동작 확인" "디렉터리 없음" "LFMSinkModule: /var/log/castis/lfmsinkmodule_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 767 | fi | |
| 768 | ||
| 769 | # CiGLBServer | |
| 770 | if [ -d /var/log/castis/glb_log ]; then | |
| 771 | LOG_FILE="/var/log/castis/glb_log/GLB.log" | |
| 772 | if [ -z "$LOG_FILES" ]; then | |
| 773 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "LOG 파일 없음" "CiGLBServer: $LOG_FILE 파일 없음" "GLB 로그파일 여부 점검필요" "$Fail" | |
| 774 | else | |
| 775 | GLB_CI_LOG=$(egrep -ic "error|Fail" $LOG_FILES) | |
| 776 | if [ $GLB_CI_LOG -ge $GLB_LIMIT ]; then | |
| 777 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 없음" "CiGLBServer: /var/log/castis/glb_log/EventLog.log 'error|fail'" "점검필요" "$Fail" | |
| 778 | else | |
| 779 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "Fail 또는 Error 없음" "CiGLBServer: /var/log/castis/glb_log/EventLog.log 'error|fail'" "이상없음" "$Success" | |
| 780 | fi | |
| 781 | fi | |
| 782 | else | |
| 783 | Make_Json_List Middle "" "CiGLBServer 동작 확인" "디렉터리 없음" "CiGLBServer: /var/log/castis/glb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 784 | fi | |
| 785 | ||
| 786 | # L_ADS | |
| 787 | if [ -d /var/log/castis/L_ads_log ]; then | |
| 788 | LOG_FILES=$(ls /var/log/castis/L_ads_log/${MONTH}/${DAY}* 2>/dev/null) | |
| 789 | if [ -z "$LOG_FILES" ]; then | |
| 790 | Make_Json_List Middle "" "L_ADS 동작 확인" "LOG 파일 없음" "L_ADS: /var/log/castis/L_ads_log/EventLog.log" "Event 로그파일 여부 점검필요" "$Fail" | |
| 791 | else | |
| 792 | ADS_LOG=$(egrep -v "Infor" $LOG_FILES | egrep -ic "error|Fail") | |
| 793 | if [ $ADS_LOG -ge $ADS_LIMIT ]; then | |
| 794 | Make_Json_List Middle "" "L_ADS 동작 확인" "Fail 또는 Error 없음" "L_ADS: /var/log/castis/L_ads_log/EventLog.log 'error|fail'" "점검필요" "$Fail" | |
| 795 | else | |
| 796 | Make_Json_List Middle "" "L_ADS 동작 확인" "Fail 또는 Error 없음" "L_ADS: /var/log/castis/L_ads_log/EventLog.log 'error|fail'" "이상없음" "$Success" | |
| 797 | fi | |
| 798 | fi | |
| 799 | else | |
| 800 | Make_Json_List Middle "" "L_ADS 동작 확인" "디렉터리 없음" "L_ADS: /var/log/castis/L_ads_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 801 | fi | |
| 802 | ||
| 803 | # ADSController | |
| 804 | if [ -d /var/log/castis/adscontroller_log ]; then | |
| 805 | LOG_FILES=$(ls /var/log/castis/adscontroller_log/$MONTH/${DAY}* 2>/dev/null) | |
| 806 | if [ -z "$LOG_FILES" ]; then | |
| 807 | Make_Json_List Middle "" "ADSController 동작 확인" "LOG 파일 없음" "ADSController: /var/log/castis/adscontroller_log/EventLog.log" "Event 로그파일 여부 점검필요" "$Fail" | |
| 808 | else | |
| 809 | ADSCONTROLLER_LOG=$(egrep -v "Infor" $LOG_FILES | egrep -ic "error|Fail") | |
| 810 | if [ $ADSCONTROLLER_LOG -ge $ADSCONTROLLER_LIMIT ]; then | |
| 811 | Make_Json_List Middle "" "ADSController 동작 확인" "Fail 또는 Error 없음" "ADSController: /var/log/castis/adscontroller_log/EventLog.log 'error|fail'" "EventLog.log 점검필요" "$Fail" | |
| 812 | else | |
| 813 | Make_Json_List Middle "" "ADSController 동작 확인" "Fail 또는 Error 없음" "ADSController: /var/log/castis/adscontroller_log/EventLog.log 'error|fail'" "이상없음" "$Success" | |
| 814 | fi | |
| 815 | fi | |
| 816 | else | |
| 817 | Make_Json_List Middle "" "ADSController 동작 확인" "디렉터리 없음" "ADSController: /var/log/castis/adscontroller_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 818 | fi | |
| 819 | ||
| 820 | # ADSClient | |
| 821 | if [ -d /var/log/castis/adc_log ]; then | |
| 822 | LOG_FILES=$(ls /var/log/castis/adc_log/$MONTH/${DAY}* 2>/dev/null) | |
| 823 | if [ -z "$LOG_FILES" ]; then | |
| 824 | Make_Json_List Middle "" "ADSClient 동작 확인" "LOG 파일 없음" "ADSClient: /var/log/castis/adc_log/ADSClient.log " "ADSClient.log 로그파일 여부 점검필요" "$Fail" | |
| 825 | else | |
| 826 | ADC_LOG=$(egrep -v "Infor" $LOG_FILES | egrep -ic "error|Fail") | |
| 827 | if [ $ADC_LOG -ge $ADC_LIMIT ]; then | |
| 828 | Make_Json_List Middle "" "ADSClient 동작 확인" "Fail 또는 Error 없음" "ADSClient: /var/log/castis/adc_log/EADSClient.log 'error|fail'" "ADSClient.log 점검필요" "$Fail" | |
| 829 | else | |
| 830 | Make_Json_List Middle "" "ADSClient 동작 확인" "Fail 또는 Error 없음" "ADSClient: /var/log/castis/adc_log/ADSClient.log 'error|fail'" "이상없음" "$Success" | |
| 831 | fi | |
| 832 | fi | |
| 833 | else | |
| 834 | Make_Json_List Middle "" "ADSClient 동작 확인" "디렉터리 없음" "ADSClient: /var/log/castis/adc_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 835 | fi | |
| 836 | ||
| 837 | # LoadBalancer2 | |
| 838 | if [ -d /var/log/castis/lb_log ]; then | |
| 839 | LOG_FILES="/var/log/castis/lb_log/LoadBalancer2.log" | |
| 840 | if [ -z "$LOG_FILES" ]; then | |
| 841 | Make_Json_List End "" "LoadBalancer2 동작 확인" "LOG 파일 없음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log" "LoadBalancer2.log 로그파일 여부 점검필요" "$Fail" | |
| 842 | else | |
| 843 | LB_CI_LOG=$(egrep -i "error|Fail" $LOG_FILES | grep -vc "LimitCacheContent list") | |
| 844 | LB_EVENT_LOG=$(egrep -ic "error|Fail" /var/log/castis/lb_log/EventLog[$EVENTLOG_DAY].log 2>/dev/null || echo 0) | |
| 845 | ||
| 846 | if [ $LB_CI_LOG -ge $LB_CI_LIMIT ]; then | |
| 847 | Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 있음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "LoadBalancer2.log 점검필요" "$Fail" | |
| 848 | else | |
| 849 | Make_Json_List End "" "LoadBalancer2 동작 확인" "Fail 또는 Error 없음" "LoadBalancer2: /var/log/castis/lb_log/LoadBalancer2.log 'error|fail'" "이상없음" "$Success" | |
| 850 | fi | |
| 851 | fi | |
| 852 | else | |
| 853 | Make_Json_List End "" "LoadBalancer2 동작 확인" "디렉터리 없음" "LoadBalancer2: /var/log/castis/lb_log 디렉터리 없음" "디렉터리 여부 점검필요" "$Fail" | |
| 854 | fi | |
| 855 | fi | |
| 856 | fi | |
| 857 | ||
| 858 | else | |
| 859 | VOD_LIMIT=50 | |
| 860 | NOMEDIA_RESET_LOG_LIMIT=200000 | |
| 861 | ||
| 862 | if [ -e "/var/log/castis/vod_log/EventLog[$EVENTLOG_DAY].log" ]; then | |
| 863 | EVENT_VOD_NOMEDIA_RESET_LOG=$(grep "No Media" $(ls -ltr /var/log/castis/vod_log/${MONTH}/${DAY}* | awk '{ print $NF }') | grep ted | awk -F '[' '{ split($2,arr,"]"); sum+=arr[1] } END{print sum}') | |
| 864 | EVENT_VOD_ERR_LOG=$(egrep -i "Error|Fail|Invalid File.*mpg" /var/log/castis/vod_log/EventLog[$EVENTLOG_DAY].log | egrep -v "OnHTTPGet Fail|Invalid URL. SETUP Fail|RTSP Message Parsing Error|Invalid|AsyncIO Error" | wc -l) | |
| 865 | else | |
| 866 | EVENT_VOD_NOMEDIA_RESET_LOG=0 | |
| 867 | EVENT_VOD_ERR_LOG=0 | |
| 868 | fi | |
| 869 | i=0 | |
| 870 | ||
| 871 | if [ $EVENT_VOD_ERR_LOG -ge $VOD_LIMIT ]; then | |
| 872 | Service_Streaming_Status_Array[$i]="VOD ERROR로그 $VOD_LIMIT건 이상 발생" | |
| 873 | ((i++)) | |
| 874 | fi | |
| 875 | ||
| 876 | if [ $EVENT_VOD_NOMEDIA_RESET_LOG -ge $NOMEDIA_RESET_LOG_LIMIT ]; then | |
| 877 | Service_Streaming_Status_Array[$i]="VOD No Media로그 $EVENT_VOD_NOMEDIA_RESET_LOG건 이상 발생" | |
| 878 | fi 2>/dev/null | |
| 879 | ||
| 880 | if [ ${#Service_Streaming_Status_Array[@]} -ge 1 ]; then | |
| 881 | Make_Json_List End "" "CIHVODServer 동작 확인" "Fail 또는 Error 없음" "'No Media|error|fail'" "${Service_Streaming_Status_Array[@]}" "$Fail" | |
| 882 | else | |
| 883 | Make_Json_List End "" "CIHVODServer 동작 확인" "Fail 또는 Error 없음" "'No Media|error|fail'" "이상없음" "$Success" | |
| 884 | fi | |
| 885 | ||
| 886 | fi | |
| 887 | ||
| 888 | } | |
| 889 | ||
| 890 | #local functions end | |
| 891 | case $1 in | |
| 892 | \? | -h) | |
| 893 | f_Usage | |
| 894 | exit | |
| 895 | ;; | |
| 896 | esac | |
| 897 | ||
| 898 | #Json start | |
| 899 | ||
| 900 | case $2 in | |
| 901 | LSM | ADC) | |
| 902 | HW_Check | |
| 903 | Network_Check | |
| 904 | OS_Check $2 | |
| 905 | Cluster_Check | |
| 906 | Service_Solution_Status_Check $2 $? | |
| 907 | ||
| 908 | hw_result=$(HW_Check) | |
| 909 | network_result=$(Network_Check) | |
| 910 | os_result=$(OS_Check $2) | |
| 911 | cluster_result=$(Cluster_Check) | |
| 912 | service_solution_result=$(Service_Solution_Status_Check $2 $?) | |
| 913 | ||
| 914 | all_results="$hw_result\n$network_result\n$os_result\n$cluster_result\n$service_solution_result" | |
| 915 | ;; | |
| 916 | VOD) | |
| 917 | HW_Check | |
| 918 | Network_Check | |
| 919 | OS_Check $2 | |
| 920 | Service_Solution_Status_Check $2 | |
| 921 | ||
| 922 | hw_result=$(HW_Check) | |
| 923 | network_result=$(Network_Check) | |
| 924 | os_result=$(OS_Check $2) | |
| 925 | service_result=$(Service_Solution_Status_Check $2) | |
| 926 | ||
| 927 | all_results="$hw_result\n$network_result\n$os_result\n$service_result" | |
| 928 | ;; | |
| 929 | ||
| 930 | esac | |
| 931 | ||
| 932 | # 결과 중 "점검필요", "불량", "이상 발생" 텍스트가 있어야 수집 | |
| 933 | if echo -e "$all_results" | grep -E -q "점검필요|불량|이상 발생"; then | |
| 934 | echo -e "\n[점검필요 항목]" | |
| 935 | echo -e "$all_results" | grep -E -q "점검필요|불량|이상 발생" | |
| 936 | echo -e "$all_results" | awk '/점검 내용/ {content=$0} /상태:/ && /점검필요/ {print content; print $0; print ""}' | |
| 937 | else | |
| 938 | echo -e "\n모든 항목이 이상없음 상태입니다." | |
| 939 | fi | |
| 940 | ||
| 941 | ||
| 942 | }}} |